#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
练习题 02: 数据类型判断器
难度: ⭐
知识点: 类型检查、isinstance()、type()
参考文件: comparison_examples/basics/01_variables_and_data_types.py
"""

def problem_description():
    """
    题目描述:
    编写一个数据类型检查器，能够识别和分类不同的Python数据类型。
    
    要求:
    1. 实现基本类型检查函数
    2. 实现复合类型检查函数
    3. 实现类型统计函数
    4. 处理特殊情况（None、自定义类等）
    
    支持的类型:
    - 基本类型: int, float, str, bool
    - 容器类型: list, tuple, dict, set
    - 特殊类型: None, function, class
    """
    pass

# TODO: 实现以下函数

def get_basic_type(value):
    """
    获取值的基本类型名称
    
    Args:
        value: 任意值
    
    Returns:
        str: 类型名称
    
    示例:
        >>> get_basic_type(42)
        'int'
        >>> get_basic_type("hello")
        'str'
        >>> get_basic_type([1, 2, 3])
        'list'
    """
    # 在这里实现你的代码
    pass

def is_numeric(value):
    """
    判断值是否为数字类型（int或float）
    
    Args:
        value: 任意值
    
    Returns:
        bool: 是否为数字类型
    
    示例:
        >>> is_numeric(42)
        True
        >>> is_numeric(3.14)
        True
        >>> is_numeric("42")
        False
    """
    # 在这里实现你的代码
    pass

def is_container(value):
    """
    判断值是否为容器类型（list, tuple, dict, set）
    
    Args:
        value: 任意值
    
    Returns:
        bool: 是否为容器类型
    
    示例:
        >>> is_container([1, 2, 3])
        True
        >>> is_container({"a": 1})
        True
        >>> is_container(42)
        False
    """
    # 在这里实现你的代码
    pass

def is_iterable(value):
    """
    判断值是否可迭代
    
    Args:
        value: 任意值
    
    Returns:
        bool: 是否可迭代
    
    示例:
        >>> is_iterable([1, 2, 3])
        True
        >>> is_iterable("hello")
        True
        >>> is_iterable(42)
        False
    """
    # 在这里实现你的代码
    pass

def get_detailed_type_info(value):
    """
    获取值的详细类型信息
    
    Args:
        value: 任意值
    
    Returns:
        dict: 包含类型信息的字典
    
    示例:
        >>> get_detailed_type_info([1, 2, 3])
        {
            'type': 'list',
            'is_numeric': False,
            'is_container': True,
            'is_iterable': True,
            'length': 3,
            'is_empty': False
        }
    """
    # 在这里实现你的代码
    pass

def analyze_data_collection(data_list):
    """
    分析数据集合中各种类型的统计信息
    
    Args:
        data_list: 包含各种类型数据的列表
    
    Returns:
        dict: 类型统计信息
    
    示例:
        >>> analyze_data_collection([1, "hello", [1,2], 3.14, None])
        {
            'total_count': 5,
            'type_counts': {
                'int': 1,
                'str': 1,
                'list': 1,
                'float': 1,
                'NoneType': 1
            },
            'numeric_count': 2,
            'container_count': 1,
            'iterable_count': 3
        }
    """
    # 在这里实现你的代码
    pass

def demonstrate_type_checker():
    """
    演示类型检查器的功能
    """
    print("=== 数据类型检查器演示 ===")
    
    # 测试数据
    test_data = [
        42,                    # int
        3.14,                  # float
        "hello",               # str
        True,                  # bool
        [1, 2, 3],            # list
        (1, 2, 3),            # tuple
        {"a": 1, "b": 2},     # dict
        {1, 2, 3},            # set
        None,                  # NoneType
        lambda x: x * 2,      # function
        range(5),             # range
    ]
    
    print("\n=== 基本类型检查 ===")
    for i, value in enumerate(test_data):
        type_name = get_basic_type(value)
        print(f"数据 {i+1}: {repr(value)} -> 类型: {type_name}")
    
    print("\n=== 特性检查 ===")
    for i, value in enumerate(test_data):
        numeric = is_numeric(value)
        container = is_container(value)
        iterable = is_iterable(value)
        print(f"数据 {i+1}: 数字={numeric}, 容器={container}, 可迭代={iterable}")
    
    print("\n=== 详细信息 ===")
    for i, value in enumerate(test_data[:5]):  # 只显示前5个
        info = get_detailed_type_info(value)
        print(f"数据 {i+1}: {info}")
    
    print("\n=== 集合分析 ===")
    analysis = analyze_data_collection(test_data)
    print(f"分析结果: {analysis}")

class CustomClass:
    """自定义类用于测试"""
    def __init__(self, value):
        self.value = value

if __name__ == "__main__":
    # 运行演示
    demonstrate_type_checker()
    
    # 额外测试自定义类
    print("\n=== 自定义类测试 ===")
    custom_obj = CustomClass("test")
    print(f"自定义对象类型: {get_basic_type(custom_obj)}")
    print(f"详细信息: {get_detailed_type_info(custom_obj)}")
